#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
char *ptr = NULL;

void show_shm(int num) // 显示共享内存的数据
{
    printf("共享内存中的数据为%s\n", ptr);
}

int main()
{
    // 1.创建密钥
    key_t key = ftok("/home", 100);
    // 2.创建共享内存
    int shmid = shmget(key, 1024, IPC_CREAT | 0777);
    if (shmid < 0)
    {
        perror("shmget");
        return -1;
    }

    // 3.映射共享内存
    ptr = shmat(shmid, NULL, 0);

    // 注册一个信号处理函数
    signal(10, show_shm);

    while (1)
    {
        printf("请输入接收数据包的用户名\n");
        char name[100] = {0};
        scanf("%s", name);
        printf("请输入发送的数据\n");
        scanf("%s", ptr);

        char cmd[1024] = {0};

        sprintf(cmd, "killall -10 %s", name); // 通知对应的人

        system(cmd);
    }
}